
//================要点总结===============
/**
 * 字母大小写全排列
 * 1. 注意不包含字母、一个字母等边界情况
 */


/**
 * @param {string} s
 * @return {string[]}
 */
 var letterCasePermutation = function(s) {
     let rslt = []
     let n = s.length
     let strArr = Array.from(s)
    function dfs(cur){
        for(;cur<n;cur++){
            let tmpCharCode = strArr[cur].charCodeAt()
            if(tmpCharCode > '9'.charCodeAt()){
                // 转成大写字符来一次迭代
                strArr[cur] =  strArr[cur].toUpperCase()
                dfs(cur+1)
                // 转成小写字符来一次迭代
                strArr[cur] = strArr[cur].toLowerCase()
                dfs(cur+1)
                return 
            }
        } 
        // 当 cur >= n 则表示到结尾，直接添加一个,此时已包含一个字符也没有的情况
        rslt.push(strArr.join(''))
    }
    dfs(0)
    return rslt
};

console.log(letterCasePermutation('1A2a1'))